/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pruebas;

/**
 *
 * @author Eduardo
 */
public class Disparador 
{
private int[] marcacion=
{/*R1*/1,/*R2*/0,/*R3*/1,/*R4*/0,/*AUTOA*/1, /*AUTOB*/0,/* AUTOC*/0, /*AUTOD*/0, /*A-D*/0,/* A-DD*/0, /*A-DI*/0,
 /*B-D*/0, /*B-DD*/0, /*B-DI*/0, /*C-D*/0,/* C-DD*/0 ,/*C-DI*/ 0,/*D-D*/0,/*D-DD*/0 ,/*D-DI*/0,
 /*PasoA*/0, /*PasoB*/0,/*PasoC*/0,/*PasoD*/0,
 /*PEATONA*/1, /*PEATONB*/0, /*PEATONC*/0,/*PEATOND*/0,
 /*PA-34*/0, /*PA-13*/0, /*PB-42*/0, /*PB-43*/0, /*PC-21*/0, /*PC-24*/0, /*PD-13*/0, /*PD-12*/0, 
 /*PASO-PA*/0, /*PASO-PB*/0, /*PASO-PC*/0, /*PASO-PD*/0};

static final int [][] I=
{
{	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	-1	,	-1	,	-1	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	-1	,	0	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	1	,	1	,	1	,	1	,	1	,	1	,	0	,	0	,	0	,	1	,	0	,	1	,	1	},
{	0	,	0	,	-1	,	0	,	-1	,	-1	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	1	,	0	,	1	,	1	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	1	,	1	,	1	,	0	},
{	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	-1	,	-1	,	-1	,	-1	,	0	,	-1	,	0	,	0	,	0	,	-1	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	1	,	1	,	1	,	1	,	0	,	1	,	0	,	0	,	0	,	1	},
{	0	,	-1	,	-1	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	-1	,	-1	,	-1	,	0	,	-1	,	0	,	0	,	0	,	1	,	1	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	1	,	1	,	1	,	0	,	1	,	0	,	0	},
{	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	-1	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	0	,	0	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	0	,	0	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	,	0	,	0	},
{	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	0	,	1	,	1	},


};


public boolean mapeo(int tipo, char id, int movimiento)
{
 boolean sepudo=false;
 int posicion=40;
 int[] disparo=
{
//toma de recursos
/*A-DD-3*/ 0 ,/*A-D-34*/ 0 ,/*A-DI-342*/ 0 ,/*B-DD-4*/ 0 ,/*B-D-42*/ 0 ,/*B-DI-421*/ 0 ,
/*C-DD-2*/ 0 ,/*C-D-21*/ 0 ,/*C-DI-213*/ 0 ,/*D-DD-1*/ 0 ,/*D-D-13*/ 0 ,/*D-DI-134*/ 0 ,

/*PA13*/ 0 ,/*PA34*/ 0 ,/*PB42*/ 0 ,/*PB43*/ 0 ,/*PC21*/ 0 ,/*PC24*/ 0 ,/*PD12*/ 0 ,/*PD13*/ 0 ,

//devolucion de recursos
/*A-3*/ 0 ,/*A-34*/ 0 ,/*A-342*/ 0 ,/*B-4*/ 0 ,/*B-42*/ 0 ,/*B-421*/ 0 ,
/*C-2*/ 0 ,/*C-21*/ 0 ,/*C-213*/ 0 ,/*D-1*/ 0 ,/*D-13*/ 0 ,/*D-134*/ 0 ,

/*PA-13*/ 0 ,/*PA-34*/ 0 ,/*PB-42*/ 0 ,/*PB-43*/ 0 , /*	PC-21*/ 0 ,/*PC-24*/ 0 ,/*PD-12*/ 0 ,/*PD-13*/ 0
}; //son 40 disparos

/*
 * tipo:0 auto
 *      1 persona
 * id: Autos : A, B, C, D
 *    :Peatones: W-(PA), X-(PB), Y-(PC), Z-(PD)
 * movimientos: autos: 1-DD, 2-D, 3- DI
 *              Peatones: 1: DI, 2:D
 */
 
 System.out.println("tipo: "+tipo+ " id: "+id +" movimiento: "+movimiento);
 
    switch(tipo)
    {
        case 0:
                switch(id)
                {
                          case 'A':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 0; break;
                                 case 2:
                                 posicion= 1; break;
                                 case 3:
                                 posicion= 2; break;                                
                             }break;
                          case 'B':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 3; break;
                                 case 2:
                                 posicion= 4; break;
                                 case 3:
                                 posicion= 5; break;                                
                             }break;
                           case 'C':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 6; break;
                                 case 2:
                                 posicion= 7; break;
                                 case 3:
                                 posicion= 8; break;                                
                             }break;
                             case 'D':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 9; break;
                                 case 2:
                                 posicion= 10; break;
                                 case 3:
                                 posicion= 11; break;                                
                             }break;
                                                                                           
                }break;
                
        case 1:
             switch(id)
                {
                             case 'W':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 12; break;
                                 case 2: 
                                 posicion= 13; break;
                             }break;
                             case 'X':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 14; break;
                                 case 2:
                                 posicion= 15; break;                                                  
                             }break;
                             case 'Y':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 16; break;
                                 case 2:
                                 posicion= 17; break;                                                      
                             }break;
                             case 'Z':
                             switch(movimiento)
                             {
                                 case 1:
                                 posicion= 18; break;
                                 case 2:
                                 posicion= 19; break;                                                        
                             }break;
             }break;
   }
    
   //System.out.println("La posicion hallada es: "+posicion);
    
   disparo[posicion]=1;
   
   /*for(int t=0; t<40; t++)
   {
       System.out.println("Disparo:" +disparo[t]);
   }
   */
   return sepudo=disparar(disparo);
  
}

public boolean disparar (int[] disparo)
{
	
	/*for(int i=0; i<40; i++)
        {
		System.out.println("El disparo a realizar es: "+ disparo[i]);	
	}*/
    
    int sum=0; //multiplicar matriz
    int multiplicacion[] = new int[40];	
    
    for(int i=0; i<40; i++){        
        for(int k=0; k<40; k++){
        sum=sum+I[i][k]*disparo[k];
        }
        multiplicacion[i] = sum;

        sum=0;
	}

	for(int i=0; i<40; i++) //obtener el nuevo vector de marcacion y ver si se puede o no
        {
	
		if(this.marcacion[i]+multiplicacion[i]==-1) //NO SE PUEDE!
                {
                 
                 return false;
               	}
                else  //SI SE PUEDE :)
                {
              
                this.marcacion[i]=this.marcacion[i]+multiplicacion[i];//obtengo el nuevo vector de marcacion
                   
                    // ahora el auto debe cruzar y luego devolver los mismos recursos que pidio!!!
                }
        }
        return true;



}


}
